MySQL WHERE、LIMIT 和分页
全部标签 我的数据库mysql中有上千条记录,我使用分页只检索了10个结果。当我在查询中添加orderby时,它会变慢,但当我省略它时,查询运行得非常快。我知道问题出在查询加载整个结果,对它们进行排序,然后获得10条记录。我不使用索引,因为用于排序的列是一个PK,我想如果我在mysql中没记错的话,会在每个主键上自动创建一个索引为什么我的PK上的索引是我要订购的列。没用过?是否有任何替代解决方案可以在不加载所有数据的情况下执行排序?如何在表格的第一行而不是表格的末尾添加新插入的数据?我的sql查询selectdistinct......orderbyappeloffre0_.ID_APPEL_O
我有一个包含10k行的posts表,我想以此创建分页。所以我有下一个查询用于此目的:SELECTpost_idFROMpostsLIMIT0,10;当我解释那个查询时,我得到了下一个结果:所以我不明白为什么MySql需要遍历9976行才能找到前10行?如果有人帮助我优化此查询,我将非常感激。我也知道那个话题MySQLORDERBY/LIMITperformance:laterowlookups,但即使我将查询修改为下一个,问题仍然存在:SELECTt.post_idFROM(SELECTpost_idFROMpostsORDERBYpost_idLIMIT0,10)qJOINposts
我有以下查询,它在销售表中的60,000条记录上花费了大约20秒。我知道ORDERBY和LIMIT导致了这个问题,因为当ORDERBY被删除时,它会在0.10秒内返回。我不确定如何优化这个查询,有什么想法吗?解释输出在这里https://gist.github.com/anonymous/1b92fa64261559de32daSELECTsale.saleIDasid,node.titleaslocation,sale.saleTotalastotal,sale.saleStatusasstatus,payment.paymentMethod,field_data_field_ban
我有一个主用户数据库表和一个要外连接的“元”表。基本上基本的查询是SELECT*FROMusers_tableLEFTOUTERJOINmeta_tableONusers_table.id=meta_table.user_idORDERBYusers_table.idASC但我必须限制users_tableID列的结果。如果我使用标准的LIMIT子句,查询也会计算元值。是否可以限制用户的表ID列并将元数据与连接相关联? 最佳答案 你可以尝试使用子查询。例如SELECT*FROMmeta_tableRIGHTOUTERJOIN(SEL
我要执行下面的命令SELECT*FROM`auktionen`LIMIT0,5ORDERBYcreatedatDESC这告诉我我有一个SQL语法错误。我followedthisquestionsanswer.每当我删除LIMIT或ORDERBY语句时,它都会再次执行:SELECT*FROM`auktionen`ORDERBYcreatedatDESCSELECT*FROM`auktionen`LIMIT0,5那么我究竟做错了什么? 最佳答案 ggwp.Thanksforthehint,addasanswerifyouwantitac
对于大型数据集,offset基于游标的分页变得很慢,因此更快的方法是使用基于游标的分页。基本上,一个anchor,数据库知道从该点开始查找结果。考虑到这一点,这是我面临的问题:我有一张tabletv_watchers自动递增id,mins_watching_tv,和user_id(下面总共20行fiddle)。在这个例子中user_id会是一样的1,所以不用担心。我们想按看电视的分钟数从高到低排序。这很容易使用这个查询来完成:SELECT*FROMtv_watchersORDERBYmins_watching_tvDESC,idASC这将返回按id以这种方式排序的20个字段的正确顺
如果我在唯一键上GROUPBY,并将LIMIT子句应用于查询,是否会在应用限制之前计算所有组?如果我在表中有一百条记录(每条记录都有一个唯一键),那么我之前创建的临时表中是否会有100条记录(用于GROUPBY)应用了LIMIT?为什么我需要这个的案例研究:以StackOverflow为例。您运行的每个查询都会显示问题列表,还会显示提出此问题的用户以及他拥有的徽章数量。因此,虽然用户问题是一对一的,但用户徽章是一对一的。在一个查询中执行此操作的唯一方法(而不是一个关于问题的查询和另一个关于用户的查询,然后合并结果)是按主键(question_id)和join+group_concat将
我正在尝试使用MySQL和ColdFusion为搜索结果创建分页。我的意图是只检索可以在单个页面上显示的查询,从而使过程高效。我尝试在我的函数中使用两个查询,但我无法将两个变量返回到cfinvoke.下面的代码没有分页,但是使用CFC显示结果搜索结果:使用这个逻辑,我可以在页面上显示我需要显示的内容:InvalidsearchNoresultsfoundDisplayResults如果我在同一个页面上执行查询,就可以很容易地按照那里的许多教程进行操作。但是查询是在一个函数中执行的。显示数据很容易,但对它进行分页却成了我的噩梦。这是我的功能:SELECT*WHERE为了分页,我考虑将函数
我有一个这样的查询,我想以分页格式显示排序的记录。这是我的查询。SELECT*FROManswersWHEREuserid='10'ORDERBYvotesLIMIT10,20LIMIT的两个参数将用于生成记录的逐页显示。现在,我的问题是ORDERBY。MySQL是如何执行这个查询的?第一种方式根据过滤器选择记录对它们进行排序限制他们第二种方式根据过滤器选择记录限制他们对它们进行排序如果我像MySQL引擎一样思考,我会想要实现第2个,因为这样我就必须对较少的记录进行排序?有人可以解释一下吗?问候 最佳答案 SQLLIMIT将在所有数
那么,LIMIT50000,1不能正常工作吗?那么,怎么会呢?如果需要几行之后的行怎么办?我在http://www.mysqlperformanceblog.com/2006/09/01/order-by-limit-performance-optimization/阅读了它 最佳答案 如果你指定了一个LIMIT,MySQL将无限制地处理查询,然后向前读取直到达到限制点。换句话说,如果您指定LIMIT50000,1,数据库将必须读取50001条记录才能获得您感兴趣的记录。如果限制很低,这并不重要,但如果限制很高,则会显着增加查询时间